import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Enumeration;

@WebServlet("/login")
public class loginServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //不写这个，即使账号密码正确，也会进入第二if
        req.setCharacterEncoding("utf8");

        String username=req.getParameter("username");
        String password=req.getParameter("password");

        if(username ==null || username.equals("") || password==null || password.equals("")){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("用户名或密码为空! 登录失败");
            return;

        }else{

            //查询数据库，验证用户名密码
            UserDao userDao=new UserDao();
            try {
                User user=userDao.selectByName(username);

                if(user==null || !user.getPassword().equals(password)){
                    resp.setContentType("text/html;charset=utf8");
                    resp.getWriter().write("用户名或密码错误! 登录失败");
                    return;
                }

                //创建回话
                HttpSession session=req.getSession(true);
                //在回话中保存一下user，以备以后使用，后续访问其他页面可以直接通过回话拿到当前是哪个用户
                session.setAttribute("user",user);

                //构造302响应报文 跳转
                resp.setStatus(302);
                resp.sendRedirect("blog_list.html");

            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    //给非登录页用  用来判断是否登录，没登录就跳转
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session=req.getSession(false);
        if(session==null){
            resp.setStatus(403);
            //404 403 或者 500 可以执行到前端ajax请求的error部分，从而手动实现跳转
            return;
        }

        //可能存在session存在，而user不存在的情况 （eg: 注销）
        User user=(User)session.getAttribute("user");
        if(user==null){
            //虽然有会话，但是里面没有user对象，也认为是未登录的状态
            resp.setStatus(403);
            return;
        }

        //不写下面这个也行，默认就是200
        resp.setStatus(200);

    }
}
